/**
 * 数组处理的方法
 * 1、Array.from()
 * 2、Array.of
 * 3、entries()，keys() 和 values()
 * 4、includes
 * 5、flat
 * 6、flatMap
 * 7、sort
 *      
 */
/**
 * 可遍历（iterable）的对象，也就是可迭代的对象 Array、string、Map、Set、arguments
 */


// 1、Array.from(ArrayLike, returnBack)
// 将两类对象转为真正的数组：类似数组的对象（array-like object）和可遍历（iterable）的对象（包括 ES6 新增的数据结构 Set 和 Map）。

var obj1 = {
    '0': '1',
    '1': '2',
    '2': '3',
    length: 13
}
var str = 'asdasdasdasdasdasdasd';

// es6的写法
var arr1 = Array.from(obj1)
// var arr12 = Array.from(obj1, item => item *2)
// var arr1 = Array.from(str)
// ES5的写法
// var arr1 = [].slice.call(obj1); 
// console.log(arr1)


// 2、Array.of
// 返回参数值组成的数组。如果没有参数，就返回一个空数组。
var arr2 = Array.of(1, 2)
// Array.of的实现
// function ArrayOf(){
//     return [].slice.call(arguments);
// }
// console.log(arr2) // [1,2]

// 3、entries()，keys() 和 values()
// keys()是对键名的遍历、values()是对键值的遍历，entries()是对键值对的遍历。
// 三个方法将会生成可迭代的对象，需要配合 for of 来使用
var arr3  = {a: 1, b: '2', 'c': 3}
// console.log('keys', arr3.keys())
// console.log('keys', arr3.values())
// console.log('keys', arr3.entries())

// 4、includes(value, startIndex)
// 查找是否存在被包含的值，有点像indexOf
var arr4 = ['home', 'login', 'about', 'bozai']
var flag4 = arr4.includes('home', 1) // false
var flag4 = arr4.includes('home', 0) // true
// console.log(flag4)

// 5、flat(num) 
// 对数组进行扁平化，参数num是扁平的级数，Infinity表示不管多少层都行
var arr5 = [1, [2, [3]], [4]]
// var newArr5 = arr5.flat(2);
var newArr5 = arr5.flat(Infinity);
console.log(newArr5)

// 6、flatMap(num) 